package com.atguigu.schedule.controller;

import com.atguigu.schedule.common.ResultCodeEnum;
import com.atguigu.schedule.pojo.SysUser;
import com.atguigu.schedule.service.SysUserService;
import com.atguigu.schedule.service.impl.SysUserServiceImpl;
import com.atguigu.schedule.util.MD5Util;
import com.atguigu.schedule.util.WebUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import com.atguigu.schedule.common.Result;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


@WebServlet("/user/*")
public class SysUserController extends BaseController {
    private SysUserService userService=new SysUserServiceImpl();

    /**
     *  注册时，接收要注册的用户名，校验用户名是否被占用的业务接口
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void checkUsernameUsed(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收用户名
        String username=req.getParameter("username");

        //调用服务层业务处理方法查询该用户名是否有对应的用户
        SysUser sysUser=userService.findByUsername(username);
        //如果有 响应 已占用
        Result result=Result.ok(null);
        if(sysUser!=null){
        //如果没有 响应 可用
            result=Result.build(null, ResultCodeEnum.USERNAME_USED);
        }
        //将result转化为JSON串转响应给客户端
        WebUtil.writeJson(resp,result);

    }

    /**
     * 接收用登陆请求，完成登录业务接口
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void login(HttpServletRequest req,HttpServletResponse resp)throws ServletException, IOException{
        SysUser sysUser = WebUtil.readJson(req, SysUser.class);

        //2、调用服务层方法，根据用户名查询用户信息
        SysUser loginUser=userService.findByUsername(sysUser.getUsername());

        Result result=Result.ok(null);
        if(loginUser==null){
            //跳转到用户名有误提示页面
            result=Result.build(null,ResultCodeEnum.USERNAME_ERROR);
        }else if(!MD5Util.encrypt(sysUser.getUserPwd()).equals(loginUser.getUserPwd())){
            //3、判断密码是否一致
               //跳转到密码有误提示页面
            result=Result.build(null,ResultCodeEnum.PASSWORD_ERROR);

        }else{
            //登陆成功之后，将登录的用户信息放入session
            Map data=new HashMap();
            loginUser.setUserPwd("");
            data.put("loginUser",loginUser);
           result=Result.ok(data);
        }
        //将登陆结果响应给客户端
        WebUtil.writeJson(resp,result);
    }





    /**
     * 接收用户注册请求的业务处理方法（接口 不是java里的interface）
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void regist(HttpServletRequest req,HttpServletResponse resp)throws ServletException, IOException{
        //接收客户端提供的参数并转换为user对象，获取信息
        SysUser registUser = WebUtil.readJson(req, SysUser.class);

        //2、调用服务方法，完成注册功能
        //    将参数放进一个SysUser对象中，在调用regist方法时传入

        int rows=userService.regist(registUser);
        //3、根据注册结果（成功  失败）做页面跳转
        Result result=Result.ok(null);
        if(rows<1){
            result=Result.build(null,ResultCodeEnum.USERNAME_USED);
        }
        WebUtil.writeJson(resp,result);
    }
}
